package asem.ast.expresiones;

import asem.ast.sentencias.NodoBloque;
import asem.excepciones.ExcepcionLlamadaInvalida;
import asem.tablaSimbolos.tipo.Tipo;
import asem.tablaSimbolos.tipo.TipoClase;
import asem.tablaSimbolos.tipo.TipoMetodo;

public class NodoExpresionParentizada extends NodoPrimario {
	protected NodoExpresion expresion;
	protected NodoLlamadaEncadenada cadenaId;

	public NodoExpresionParentizada(NodoExpresion exp,
			NodoLlamadaEncadenada lista) {
		expresion = exp;
		cadenaId = lista;
	}

	@Override
	public TipoMetodo chequeoSentencias(NodoBloque contenedor) {
		Tipo t = (Tipo) expresion.chequeoSentencias(contenedor);
		TipoMetodo r = t;

		if (cadenaId != null)
			if (t instanceof TipoClase) // Solo puedo pedirle algo a un tipo
										// clase
				r = cadenaId.chequeoSentencias(contenedor, t);
			else
				throw new ExcepcionLlamadaInvalida(t, cadenaId.getId());

		return r;
	}
}
